package com.ilink.teacherservice.service.Screen;

import com.ilink.teacherservice.mapper.Screen.CourseStatisticsMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.List;
import java.util.Map;

@Service
public class CourseStatisticsService {

    private static final Logger logger = LoggerFactory.getLogger(CourseStatisticsService.class);

    @Autowired
    private CourseStatisticsMapper courseStatisticsMapper;

    /**
     * 计算课程统计数据，根据不同的条件进行分组和聚类统计。
     * 如果 fileId 存在，则按 fileId 聚类；
     * 如果 fileId 不存在，但 chapterId 存在，则按 chapterId 聚类；
     * 如果 fileId 和 chapterId 都不存在，但 courseId 存在，则按 courseId 聚类；
     * 如果 fileId、chapterId 和 courseId 都不存在，则按 teacherId 聚类。
     *
     * @param courseId       课程ID，用于按课程筛选
     * @param chapterId      章节ID，用于按章节筛选
     * @param fileId         文件ID，用于按文件筛选

     * @param teacherId      教师ID，用于按教师筛选
     * @return 按指定条件分组的统计数据列表
     */
    public List<Map<String, Object>> calculateStatistics(Long courseId, Long chapterId, Long fileId, String teacherId, Integer time, String type) {
        try {
            // 直接调用 Mapper 层的统计查询，Mapper 层在 SQL 中处理聚类和统计
            return courseStatisticsMapper.getStatistics(courseId, chapterId, fileId, teacherId, time, type);
        } catch (Exception e) {
            // 记录错误日志
            logger.error("Error occurred while calculating statistics", e);

            // 可以选择抛出自定义异常或返回空结果，具体根据业务需求来决定
            throw new RuntimeException("Failed to calculate statistics", e);
        }
    }
}
